package com.cy.sys.Aop;


import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.Signature;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;


import lombok.extern.slf4j.Slf4j;

@Aspect
@Slf4j
@Component
public class doLogAop {
	/**	log.info日志输出需要显示时间
	 * log.info("sart:{}",System.currentTimeMillis());加上大括号可以显示时间
	 * 
	 */
	@Pointcut("bean(sysUserSerivceimpl)")//切入点也就是各种需要从哪个对象切入
	public void dologaoppoint() {}
	
	
	@Around("dologaoppoint()")//连接点
	public Object dologpoint(ProceedingJoinPoint jp) throws Throwable {
		try {
		log.info("sart:{}",+System.currentTimeMillis());//需要增益的代码
		Object result = jp.proceed();	//调用目标方法
		log.info("end:{}",+System.currentTimeMillis());
		log.info("目标方法"+dogetTargetMethod(jp));//获取目标方法名
		return result;		//返回目标方法结果对象
		}catch(Throwable E) {
			log.error("目标执行异常"+E.getMessage());
			throw E;
		}
	}
	
	//*获取方法名获取前当前执行方法的限定类名在拼接方法名
	public String dogetTargetMethod(ProceedingJoinPoint jp) {
		Class<?> getcls = jp.getTarget().getClass();
		String name = getcls.getName();
		Signature jpname = jp.getSignature();
		String newname = jpname.getName();
		return name+"."+newname;
	}	
}
